package org.jgs1904.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;

/**
 * @author 墨苍璃
 * @date 2022年01月10日20时53分
 */
@Controller
@RequestMapping("/HelloController")
public class HelloController {


    /**
     * 真实访问地址 : http://localhost:8080//HelloController/hello?a=6&b=8
     * <p>
     * a/b不能为空
     *
     * @param model
     * @return
     */
    @GetMapping("/hello")
    public String sayHello(int a, int b, Model model) {
        System.out.println("非 PathVariable 请求");
        //向模型中添加属性msg与值，可以在JSP页面中取出并渲染
        model.addAttribute("msg", "hello,SpringMVC-get " + a + b);
        //web-inf/jsp/hello.jsp
        return "hello";
    }

    /**
     * @param a
     * @param b
     * @param model
     * @return
     * @PathVariable 注解，让方法参数的值对应绑定到一个URI模板变量上。
     * 真实访问地址 :http://localhost:8080//HelloController/hello/3/5
     */
    @GetMapping("/hello/{a}/{b}")
    public String sayHello222(@PathVariable int a, @PathVariable int b, Model model) {
        System.out.println("@PathVariable 注解，让方法参数的值对应绑定到一个URI模板变量上。");

        //向模型中添加属性msg与值，可以在JSP页面中取出并渲染
        model.addAttribute("msg", "hello,SpringMVC_RestFul" + a + b);
        //web-inf/jsp/hello.jsp
        return "hello";
    }


    /**
     * post 请求
     *
     * @param a
     * @param b
     * @param model
     * @return
     */
    @PostMapping("/hello1")
    public String sayHello11(int a, int b, Model model) {

        //向模型中添加属性msg与值，可以在JSP页面中取出并渲染
        model.addAttribute("msg", "hello,SpringMVC-POST" + a + b);
        //web-inf/jsp/hello.jsp
        return "hello";
    }

    @RequestMapping(value = "/hello1/{a}/{b}", method = {RequestMethod.POST})
    public String sayHello111(@PathVariable int a, @PathVariable int b, Model model) {

        //向模型中添加属性msg与值，可以在JSP页面中取出并渲染
        model.addAttribute("msg", "hello,SpringMVC-POST" + a + b);
        //web-inf/jsp/hello.jsp
        return "hello";
    }


    /**
     * DELETE 请求
     * DELETE 和 PUT 是不支持转发的，只支持重定向
     * 因为重定向实际上是客户端再次向服务器发送请求，所以无法访问WEB-INF目录
     *
     * @param model
     * @return
     */
    @RequestMapping(value = "/hi", method = {RequestMethod.DELETE})
    public String sayHello1(HttpServletRequest request, Model model) {

        //向模型中添加属性msg与值，可以在JSP页面中取出并渲染
        model.addAttribute("msg", "hi,SpringMVC-DELETE");
        //web-inf/jsp/hi.jsp
        //获取路径
        String contextPath = request.getContextPath();
        //重定向
        //return "redirect:hi";
        // return "redirect:/index.jsp";

        System.out.println("redirect:" + contextPath + "/jsp/index.jsp");

        return "redirect:" + contextPath + "/hi.jsp";

        //默认转发使用get请求
        // return "hi";
    }

    @RequestMapping(value = "/hi", method = {RequestMethod.GET})
    public String sayHello(Model model) {

        //向模型中添加属性msg与值，可以在JSP页面中取出并渲染
        model.addAttribute("msg", "hi,SpringMVC-DELETE");
        //web-inf/jsp/hi.jsp

        //重定向
//        return "redirect:hi";
        // return "redirect:/index.jsp";
        return "hi";
    }

}
